/**
 * 给定D，求x和y，满足
 * |x * x + y * y - D|最小
 * D在2E12
 * 注意到x和y必然在sqrt(2)E6以内。
 * 因此把[1...sqrt(D)]之内的数的平方求出来
 * 然后对其中的每个元素，再做个二分即可
 * O(sqrt(D)log(sqrt(D)))
 * 标程是O(sqrt(D))的做法
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using vi = vector<int>;
using llt = long long;

llt D;

llt proc(){
    map<llt, llt> mm;
    mm[0] = 0;
    mm[1] = 1;
    llt i = 2;
    for(i=2;i*i<=D;++i){
        mm[i * i] = i;
    }
    mm[i * i] = i;
    ++i;
    mm[i * i] = i;

    llt ans = D;
    for(const auto & p : mm){
        if(p.first == D) return 0;
        if(p.first > D){
            ans = min(ans, p.first - D);
            continue;
        }
        llt left = D - p.first;
        auto pp = mm.equal_range(left);
        if(pp.first != pp.second) return 0;

        auto it = pp.first;
        if(it != mm.end()) ans = min(ans, it->first - left);
        if(it == mm.begin()) {
            throw runtime_error(to_string(it->first).c_str());
        }
        --it;
        ans = min(ans, left - it->first);
    }
    return ans;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    cin >> D;
    cout << proc() << endl;
    return 0;
}